// Copyright (c) 2012, yuno. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
//    this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
//    this list of conditions and the following disclaimer in the documentation
//    and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of contributors
//    may be used to endorse or promote products derived from this software
//    without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
package sugarmintcandy.widgetwindow;

import java.util.Arrays;

import android.util.Log;

public class Debug {
    public static final String TAG = "widgetwindow";
    public static final boolean TRACE = false;

    private static void doTrace(String format, Object... args) {
	String thisClass = Debug.class.getName();
	StackTraceElement elt = null;
	for (StackTraceElement e : Thread.currentThread().getStackTrace()) {
	    String className = e.getClassName();
	    if (className.startsWith("dalvik.")
		    || className.startsWith("java.")) {
		continue;
	    }
	    if (!thisClass.equals(className)) {
		elt = e;
		break;
	    }
	}
	if (elt == null) {
	    return;
	}
	String fqcn = elt.getClassName();
	String className = fqcn.substring(fqcn.lastIndexOf('.') + 1);
	for (int i = 0, n = args.length; i < n; i++) {
	    if (args[i] instanceof Object[]) {
		args[i] = Arrays.toString((Object[]) args[i]);
	    }
	}
	String msg = className + '#' + elt.getMethodName();
	if (format != null) {
	    msg += ": " + String.format(format, args);
	}
	Log.d(TAG, msg);
    }

    public static void trace() {
	if (TRACE) {
	    doTrace(null);
	}
    }

    public static void trace(Object msg) {
	if (TRACE) {
	    doTrace("%s", msg);
	}
    }

    public static void trace(String format, Object arg1) {
	if (TRACE) {
	    doTrace(format, arg1);
	}
    }

    public static void trace(String format, Object arg1, Object arg2) {
	if (TRACE) {
	    doTrace(format, arg1, arg2);
	}
    }

    public static void trace(String format, Object... args) {
	if (TRACE) {
	    doTrace(format, args);
	}
    }

    public static void warn(Throwable ex) {
	Log.w(TAG, ex);
    }
}
